package com.huike.dao;

import com.huike.po.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper
/**
 *
 */
public interface GroupDAO {
    //获取用户所有加入的群聊的详细资料
    public List<GroupDetail> selectGroupListInfo(@Param("account") String account);
    //获取面向用户的已加入的群聊的基本资料(群备注等,每个用户对同个群备注可能不一样)
    public List<GroupBasic> selectGroupListBasic(@Param("account") String account);

    //根据群号，返回该群的聊天记录
    public List<GroupMessage> selectGroupChatRecordById (@Param("groupId")String groupId);
    //根据群号，返回该群的成员信息
    public List<GroupMember> selectGroupMemberById (@Param("groupId") String groupId);

    public List<GroupMessage> selectGroupRoamingRecordById(@Param("groupId")String groupId);
    public void insertGroupChatRecord(GroupMessage message);

    public List<User> selectUsersByGroupId(@Param("groupId")String groupId);

    void deleteOfflineGroupRecord (@Param("userAccount")String userAccount, @Param("groupId")String groupId);

    //设置/解除禁言
    public void updateGroupMemberIs_mute(GroupMember groupMember);
    //修改角色
    public void updateGroupMemberRole(GroupMember groupMember);
    //设置/解除集体禁言
    public void setAllGroupMemberIs_mute(@Param("groupId") String groupId, @Param("is_muted") int is_muted);
    //根据账号和群号返回管理员以及群主信息
    public List<User> selectManagersByGroupId(@Param("groupId")String groupId);
    //查找群
    public List<GroupDetail> findGroupById(@Param("groupId") String groupId);
    //查找指定类型的聊天记录
    public List<GroupMessage> selectGroupMessageByIdAndType(@Param("groupId") String groupId, @Param("type") String type);
    //写了但是未用到的sql语句
    //基础添加和修改
    public void insertGroupMember(GroupMember groupMember);
    public void updateGroupMember(GroupMember groupMember);
    //根据账号和群号返回群员信息
    public List<GroupMember> selectGroupMemberByAccountAndGroupId(@Param("account") String account, @Param("groupId") String groupId);
    //根据群号和账号添加成员
    public void addMemberByGroupIdAndAccount(GroupMember groupMember);
    //根据群号和账号删除成员
    public boolean deleteMemberByGroupIdAndAccount(GroupMember groupMember);
    //根据群号返回群聊种类
    public Integer getGroupTypeByGroupId(@Param("groupId") String groupId);
    // 根据群号和成员账号返回群成员在群聊中的身份
    public Integer getGMRoleIdByGroupIdAndAccount(GroupMember groupMember);
    // 根据群号和成员账号返回成员是否在群聊中
    public Integer getIsInGroupByGroupIdAndAccount(GroupMember groupMember);
    // 根据群号判断群是否存在
    public Integer getGroupExistByGroupId(@Param("groupId")String groupId);
    //根据群主账号和需求群种类创建一个群
    public void createGroupByAccountAndGroupType(GroupWithOwnerAccount groupWithOwnerAccount);
    public void createOrganizationGroup(GroupWithOwnerAccount groupWithOwnerAccount);
    //获得最大的groupId
    public int getMaxGroupId();
    public void insertGroupFileRecord(GroupFileMsg message);
    //根据群号和文件名获取文件
    public List<GroupFileMsg> selectFileByGroupIdAndFileName(@Param("groupId")String groupId, @Param("fileName") String fileName);
    //根据群号获取文件列表
    public List<GroupFileMsg> selectGroupFileRecordById(@Param("groupId")String groupId);

}
